package controller;

import helper.AngepassteException;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Benutzer;
import model.Gruppe;

/**
 * Dieses Servlet dient dem Administrator zum Anzeigen und löschen aller
 * Benutzer (bearbeiten leitet weiter zum Benutzerform).
 */
@WebServlet({ "/BenutzerListe", "/benutzerliste", "/benutzerliste.html",
		"/benutzerliste.php" })
public class BenutzerListe extends SessionControll {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public BenutzerListe() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		if (super.gruppePruefen(request, response, Gruppe.ADMIN)) {
			request.setAttribute("benutzer",
					benutzerRepository.toArray(new Benutzer[0]));

			RequestDispatcher view;
			view = request.getRequestDispatcher("BenutzerListe.jsp");
			view.forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		if (super.gruppePruefen(request, response, Gruppe.ADMIN)) {
			if (request.getParameter("delBenutzerId") != null) {
				try {
					int del = Integer.parseInt(request
							.getParameter("delBenutzerId"));
					Benutzer b = benutzerRepository.getBenutzerNachId(del);
					if (b != null) {
						try {
	
							// Logging (ID des geänderten Benutzers, Aktionstyp, aktueller Benutzer, Logtyp)
							new helper.Logging(""+b.getId(),"Löschung", benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)0);

							benutzerRepository.delBenutzer(b);
						} catch (SQLException e) {
							new helper.Logging("Fehler F050",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
							throw new AngepassteException("Fehler?weiterleitung=BenutzerListe&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F050)");
						} catch (ClassNotFoundException e) {
							new helper.Logging("Fehler F051",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
							throw new AngepassteException("Fehler?weiterleitung=BenutzerListe&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F051)");
						}
					}
				} catch (NumberFormatException e) {
					new helper.Logging("Fehler F052",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
					response.sendRedirect("Fehler?weiterleitung=BenutzerListe&fehler=Das Format der Benutzer-ID war falsch! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F052)");
				} catch(AngepassteException e){
					response.sendRedirect(e.getMessage());
				}
			}
			/*
			 * String newBaum = request.getParameter("newBaum"); if() {
			 * 
			 * }
			 */
		}
	}

}
